2015-02-09 26 views
7

Tôi đang tạo một ứng dụng Jailbreak được cài đặt trong/Applications. Dù tôi có làm gì đi chăng nữa thì tôi cũng không thể nhận được thông báo đẩy để làm việc.Dịch vụ thông báo của Apple cho ứng dụng Jailbreak

tôi có:

  • tạo cần thiết ID ứng dụng trong phát triển giao diện điều khiển của Apple,
  • tạo đủ các chứng chỉ và các quy định,
  • cài đặt ở trên khi cần thiết,
  • Signed ứng dụng với chứng chỉ tương ứng,
  • Đã thêm nội dung được tìm thấy trong tệp .MobileProvision vào quyền,
  • Đánh đầu tôi vào tường.

Các triệu chứng như sau. Tôi đăng ký thành công với APNS và nhận Mã thông báo Thiết bị. Mã Thông Báo Thiết Bị được gửi thành công đến máy chủ của tôi. Máy chủ của tôi kết nối thành công với máy chủ APNS, gửi thành công thông báo đẩy tới máy chủ APNS mà không có bất kỳ khiếu nại nào và ứng dụng của tôi chưa bao giờ nhận được thông báo Push. Nó chỉ bị lạc. Nó không quan trọng cho dù tôi thử nghiệm với một thiết bị ios 7 jailbroken hoặc thiết bị jailbroken ios 8. Theo tôi có thể nói cả hai thiết bị này đều nhận được tin nhắn APNS thành công cho các ứng dụng khác.

Tôi đã thử cả cài đặt nhà phát triển và sản xuất.

Có một số bước cần thiết cho các ứng dụng Jailbreak mà tôi đang thiếu thường được thực hiện cho bạn khi ứng dụng được đăng ký thường xuyên không? Các ứng dụng hệ thống không có khả năng là ứng dụng APNS (có vẻ khá lạ)?

Dưới đây là một số mã. Điện thoại-side (Swift):

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    if Global.OSVersion() < 800 
    { 
     application.registerForRemoteNotificationTypes(UIRemoteNotificationType.Alert 
                | UIRemoteNotificationType.Badge 
                | UIRemoteNotificationType.Sound); 
    } 
    else 
    { 
     var types: UIUserNotificationType = UIUserNotificationType.Alert 
              | UIUserNotificationType.Badge 
              | UIUserNotificationType.Sound; 
     var settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, 
                       categories: nil); 
     application.registerUserNotificationSettings(settings); 
    } 
    application.beginReceivingRemoteControlEvents(); 
} 

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) 
{ 
    let bytes: [Byte] = deviceToken.getBytes(); 
    var token: String = ""; 
    for byte: Byte in bytes 
    { 
     token += NSString(format: "%02.2hhx", byte); 
    } 
    // code to send token to server goes here... 
} 

func application(application: UIApplication, 
       didReceiveRemoteNotification userInfo: [NSObject : AnyObject], 
       fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 
{ 
    let command: String = userInfo["Command"] as String; 
    // code to process command goes here... 
} 

đang Server (C#):

private bool SendIPhone() 
    { 
     isSent = false; 
     PushBroker pushBroker = new PushBroker(); 
     try 
     { 
      pushBroker.OnChannelCreated += pushBroker_OnChannelCreated; 
      pushBroker.OnChannelException += pushBroker_OnChannelException; 
      pushBroker.OnChannelDestroyed += pushBroker_OnChannelDestroyed; 
      pushBroker.OnServiceException += pushBroker_OnServiceException; 
      pushBroker.OnNotificationFailed += pushBroker_OnNotificationFailed; 
      pushBroker.OnNotificationSent += pushBroker_OnNotificationSent; 
      pushBroker.OnNotificationRequeue += pushBroker_OnNotificationRequeue; 
      pushBroker.OnDeviceSubscriptionChanged += pushBroker_OnDeviceSubscriptionChanged; 
      pushBroker.OnDeviceSubscriptionExpired += pushBroker_OnDeviceSubscriptionExpired; 
      pushBroker.RegisterAppleService(new ApplePushChannelSettings(XXXConfig.APNSIsProduction, 
                     XXXStatic.APNSCertificate, 
                     XXXConfig.APNSPassword)); 
      AppleNotification notification = new AppleNotification(); 
      notification.DeviceToken = cloudToPhoneID; 
      notification.Payload.Alert.Body = "This is a test"; 
      notification.Payload.Sound = "Alarm.wav"; 
      notification.Payload.Badge = 5; 
      notification.Payload.CustomItems["content-available"] = new Object[] { "1" }; 
      notification.Payload.CustomItems["Command"] = new Object[] { "TestCommand" }; 
      pushBroker.QueueNotification(notification); 
     } 
     finally 
     { 
      pushBroker.StopAllServices(); // This will force us to wait until we have sent what's in the queue... 
     } 
     return isSent; 
    } 

    void pushBroker_OnNotificationSent(object sender, INotification notification) 
    { 
     isSent = true; 
    } 

Có rất nhiều mã Tôi không thấy rằng tất cả các công trình vì nó là nghĩa vụ phải. SendIPhone luôn trả về true và nó chỉ có thể được đặt thành true khi pushBroker_OnNotificationSent được gọi.

Quyền lợi:

<dict> 
    <key>application-identifier</key> 
    <string>REMOVEDFORPRIVACY</string> 
    <key>aps-environment</key> 
    <string>development</string> 
    <key>com.apple.developer.team-identifier</key> 
    <string>REMOVEDFORPRIVACY</string> 
    <key>get-task-allow</key> 
    <true/> 
    <key>keychain-access-groups</key> 
    <array> 
     <string>REMOVEDFORPRIVACY</string> 
    </array> 
</dict> 

tôi đang thiếu gì hoặc là không có con đường có từ đây?

+0

Lỗi thường gặp với thông báo đẩy là sử dụng chứng chỉ phân phối nhưng gửi đẩy tới máy chủ thông báo đẩy phát triển của Apple. Bạn có chắc là bạn đang thiết lập môi trường phân phối/phát triển của mình đúng không? – Emilie

+0

Yup.Tôi hiện chỉ có giấy chứng nhận phát triển cho dự án này và đã loại bỏ mọi thứ liên quan đến sản xuất vì lý do chính xác này. Cảm ơn rất nhiều gợi ý, nhưng tôi nghĩ tôi có đề xuất này. – user3701103

+0

Bạn đã bao giờ làm việc này chưa? Im có cùng một vấn đề. – Darren

Trả lời

0

tôi không kiểm tra nó, nhưng nếu tôi biết Apple cho phép thông báo đẩy trong iOS thư mục ứng dụng gốc (chỉ cần nhìn vào "mẹo" ứng dụng), vì vậy nó có lẽ vấn đề với chứng chỉ, như vậy có lẽ sẽ trợ giúp này:

http://www.hackthatphone.com/3x/push.html

Đây là hướng dẫn dành cho thiết bị iOS bị tấn công, chưa có chứng chỉ hợp lệ cho thông báo đẩy nhưng nó cũng có thể giúp bạn.

enter image description here

+1

Mẹo ứng dụng sử dụng thông báo cục bộ. Chúng là các thông báo được định thời gian từ chính ứng dụng và không được gửi qua APNS. – Darren

Các vấn đề liên quan