接入華為推送用API給iOS應(yīng)用發(fā)消息時如何獲取access_token?

來源: 華為開發(fā)者論壇
作者:胡椒
時間:2021-03-25
17153
經(jīng)常有開發(fā)小伙伴向我們提問關(guān)于使用華為推送給蘋果手機(jī)推送消息的問題,那么首先華為推送到底支不支持蘋果手機(jī)呢?

經(jīng)常有開發(fā)小伙伴向我們提問關(guān)于使用華為推送給蘋果手機(jī)推送消息的問題,那么首先華為推送到底支不支持蘋果手機(jī)呢?答案可以肯定地告訴你:可以。

ia_4800000003.png

蘋果手機(jī)如何接入華為推送?

首先你需要提前準(zhǔn)備好開發(fā)環(huán)境:

1)安裝Xcode 10.1或更高版本。

2)安裝CocoaPods 1.4.0或更高版本。

3)準(zhǔn)備一臺用于測試的iPhone設(shè)備或者模擬器。

開發(fā)環(huán)境準(zhǔn)備好了,接下來就可以準(zhǔn)備開發(fā)啦!

在開發(fā)應(yīng)用前,需要在AppGallery Connect中配置相關(guān)信息,準(zhǔn)備iOS推送消息憑證以及配置iOS推送代理權(quán)益。具體準(zhǔn)備方法請參見:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/ios-dev-prepare-0000001062940204-V5#ZH-CN_TOPIC_0000001124013099__section113157170295?ha_source=hms1

如何獲取Token?

1.     在Xcode中為您的項目啟用推送服務(wù),啟用“Application Targ > Signing&Capabilities”中的"Push Notifications",勾選“Application Targ > Signing&Capabilities > Background Modes”中的“Remote notifications”和“Background processing”。

2.     向APNs(蘋果推送服務(wù))發(fā)起用戶允許發(fā)送推送通知的請求。

```
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
 
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError *_Nullable error) {
    if (granted) {
        // 授權(quán)成功
        [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings *_Nonnull settings) {
            if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) {
               dispatch_async(dispatch_get_main_queue(), ^{
                 NSLog(@"grant authorized");
                 [[UIApplication sharedApplication] registerForRemoteNotifications];
               });
            }
        }];
    }
}];


```

用戶需要在應(yīng)用程序點擊“允許”才可以接受推送消息。

 ia_4800000004.png

3.上述步驟成功后,需要獲取device token(蘋果設(shè)備的唯一標(biāo)識)。獲取device token后需要去掉其中的特殊符號,大于等于iOS13版本和小于iOS13版本的device token格式有所差別,可參考如下代碼進(jìn)行處理:

```

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    PushDemoLog(@"suceess get token:{%@}", deviceToken);
    // 判斷iOS設(shè)備系統(tǒng)版本
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 13) {
        if (![deviceToken isKindOfClass:[NSData class]]) {
            return;
        }
        const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes];
        NSString *strToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                              ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                              ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                              ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
        PushDemoLog(@">=ios13 My FINAL TOKEN is:%@", strToken);
        APN_TOKEN = strToken;
        return;
    } else {
        NSString *token = [NSString stringWithFormat:@"%@", deviceToken];
        token = [token stringByReplacingOccurrencesOfString:@"<" withString:@""];
        token = [token stringByReplacingOccurrencesOfString:@">" withString:@""];
        token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
        PushDemoLog(@"My FINAL TOKEN is %@", token);
        APN_TOKEN = token;
    }
}

```

4.成功處理device token后將其作為入?yún)@取華為推送服務(wù)Token:

```

NSString *apnsToken = @"yourApnsToken";
NSString *huaweiToken = [[HmsInstanceId getInstance] getToken:apnsToken];

```

更多應(yīng)用開發(fā)步驟參見:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/ios-dev-guides-0000001062462396?ha_source=hms1

問題分享

接下來給大家分享一位開發(fā)者在論壇上提問關(guān)于蘋果手機(jī)接入華為push的問題:“我想使用華為的消息推送服務(wù),給蘋果手機(jī)推送消息,申請應(yīng)用后,缺少App Secret,無法獲取到access_token,怎么解

推送接口以access_token鑒權(quán),如圖:

ia_4800000005.png

獲取access_token的接口,如圖:

ia_4800000006.png

我的項目配置,不顯示app secret,如圖:

ia_4800000007.png

看安卓應(yīng)用的配置,相同位置是有app secret的,如圖:

ia_4800000008.png

解決方法:

需要在相同項目下再建一個Android的應(yīng)用,用Android應(yīng)用的appId和appSecret去申請access_token就可以了。

那么,用安卓應(yīng)用獲取到access_token為蘋果應(yīng)用推送消息,是可以的嗎?

答案依舊是——可以的!

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于華為開發(fā)者論壇,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多