1

まだリリースされていない進行中のアプリがあり、バックエンドに加えて Parse for Push に依存していましたが、Parse がシャットダウンしているため、Parse でリリースして後で変更するのは意味がありません。

とにかく、今は iOS 用の GCM に移行し、その下に表示されているコードから、プッシュ通知 (通常の iOS の方法) に登録するだけです。トークンを取得したら、それを GCM に登録します (Parse の場合と同じように)。しかし、最大の違いは、アプリを強制終了するとプッシュ通知が受信されないことですが、Parse があり、アプリを強制終了すると、プッシュ通知を送信して、Parse のオープン ソース SDK の下にあるものを確認します (すべてを理解することはできませんでしたが、PushKit の使用は見つかりませんでした)、Pushkit は Web 上のいくつかの同様の質問で提案されました。しかし、それを達成する方法について明確な解決策はありません。

プッシュを登録するために私がやっていることは次のとおりです。

// Register for remote notifications
UIUserNotificationType allNotificationTypes =
(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
UIUserNotificationSettings *settings =
[UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
[[UIApplication sharedApplication] registerForRemoteNotifications]; 

それで:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"Application registered for remote notification");

    GGLInstanceIDConfig *instanceIDConfig = [GGLInstanceIDConfig defaultConfig];
    instanceIDConfig.delegate = self;

    [[GGLInstanceID sharedInstance] startWithConfig:instanceIDConfig];
    _registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken,
                             kGGLInstanceIDAPNSServerTypeSandboxOption:@YES};
    [[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:_gcmSenderID
                                                        scope:kGGLInstanceIDScopeGCM
                                                      options:_registrationOptions
                                                      handler:_registrationHandler];

    NSLog(@"This is device token%@", deviceToken);
}

私が送信しているプッシュ通知は次のとおりです。

curl --header 'Content-Type:application/json' --header 'Authorization: key=My-Google-Key' \
       https://android.googleapis.com/gcm/send \
-d '{"to": "/topics/test","notification":{"sound": "default","badge": "1","title": "test title","body": "Test body", "dl": "myscheme://section/e5c7f33080940a95b94b50941e667da6", "content_available":true}, "data":{"alert":"breaking title","title":"breaking title","dl": "myscheme://section/e5c7f33080940a95b94b50941e667da6"", "content_available":true}}'

要約すると、アプリがまったく実行されていない場合でもプッシュ通知を受け取る方法が必要です

4

1 に答える 1

1

他の誰かが同じ問題に直面した場合に備えて、ここに残しておきます。

ペイロードの「優先」キーがすべてでした

"priority":10 は優先度が高いことを意味します。

curl --header 'Content-Type:application/json' --header 'Authorization: key=My-Google-Key' \
       https://android.googleapis.com/gcm/send \
-d '{"to": "/topics/test","priority":10,"notification":{"sound": "default","badge": "1","title": "test title","body": "Test body", "dl": "myscheme://section/e5c7f33080940a95b94b50941e667da6"}, "data":{"alert":"breaking title","title":"breaking title","dl": "myscheme://section/e5c7f33080940a95b94b50941e667da6"}}'

参照: https://developers.google.com/cloud-messaging/http-server-ref#priority

補足:「通知」と「データ」を複製する必要はありません。これは単なる例であり、アプリで使用する実際のペイロードではありません。

于 2016-01-30T11:01:50.693 に答える